package com.fanghaoran.view;

import com.fanghaoran.bean.Interaction;
import com.fanghaoran.controller.UserController;
import com.fanghaoran.view.manager.MainFrame;
import com.fanghaoran.view.user.MainPageFrame;
import com.fanghaoran.view.user.BackGroundPanel;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;

/**
 * @Author: win11
 * @Date: 2023/03/15/23:07
 * @Description: 注册登录主页面
 */
public class LoginFrame extends JFrame {
    public static final int USER=0;
    public static final int MANAGER=1;
    /**
     * 静态变量记录用户名,方便后面主页面个人信息的查找
     */
    public static String usernameInput;
    /**
     * 登录模式 默认是用户登录
     */
    public static int loginModel=USER;

    public LoginFrame() throws Exception {
        //最外层界面frame的设置
        initFrame();
        //界面中的视图,控件等的设置
        initView();

        //设置可见
        this.setVisible(true);
    }

    private void initView() throws Exception {
        //自定义panel可以带背景图片
        BackGroundPanel panel = new BackGroundPanel(ImageIO.read(new File("src//image//lBackground.jpg")));
        //垂直排列的box
        Box vbox = Box.createVerticalBox();
        //调整竖直box的位置,使其大致居中
        vbox.add(Box.createVerticalStrut(100));
        //水平排列的box 完成用户名及对应文本框
        Box aBox = Box.createHorizontalBox();
        //用户名文本
        JLabel usernameText = new JLabel("用户名:");
        //文本输入框
        JTextField username = new JTextField(15);
        //添加到box
        aBox.add(usernameText);
        //给一些竖直距离 不会凑在一块
        aBox.add(Box.createHorizontalStrut(20));
        aBox.add(username);

        //水平排列的box 完成密码及对应文本框
        Box pBox = Box.createHorizontalBox();
        //密码文本
        JLabel passwordText = new JLabel("密    码:");
        //隐私性的文本输入框
        JPasswordField password = new JPasswordField(15);
        //添加到box
        pBox.add(passwordText);
        pBox.add(Box.createHorizontalStrut(20));
        pBox.add(password);

        Box cBox = Box.createHorizontalBox();
        //用户登录选项按钮
        JRadioButton userLogin = new JRadioButton("用户登录", true);
        //管理员登录选项按钮
        JRadioButton managerLogin = new JRadioButton("管理员登录", false);
        //创建按钮组放入两个按钮->实现单选的效果
        ButtonGroup bg = new ButtonGroup();
        bg.add(userLogin);
        bg.add(managerLogin);
        cBox.add(userLogin);
        cBox.add(Box.createHorizontalStrut(40));
        cBox.add(managerLogin);

        //组装按钮
        //水平box存放按钮
        Box bbox = Box.createHorizontalBox();
        //登录按钮
        JButton loginButton = new JButton("登录");
        //注册按钮
        JButton registerButton = new JButton("注册");
        bbox.add(loginButton);
        bbox.add(registerButton);



        //水平box放到竖直box中
        vbox.add(aBox);
        vbox.add(Box.createVerticalStrut(20));
        vbox.add(pBox);
        vbox.add(Box.createVerticalStrut(20));
        vbox.add(cBox);
        vbox.add(Box.createVerticalStrut(20));
        vbox.add(bbox);

        //竖直box添加到panel
        panel.add(vbox, BorderLayout.CENTER);
        //panel添加到frame中
        this.add(panel);

        //给按钮添加点击事件
        //选择模式
        userLogin.addActionListener(e->loginModel=USER);
        managerLogin.addActionListener(e->loginModel=MANAGER);
        //登录
        loginButton.addActionListener((e) -> {
                    //获取文本输入框数据
                    //用户名
                    usernameInput = username.getText();
                    //密码
                    char[] c = password.getPassword();
                    String passwordInput = new String(c);
                    //将输入数据交给controller层 controller层再交给service去执行并返回结果
                    Interaction login;
                    if(loginModel==USER) {
                        login = new UserController().login(usernameInput, passwordInput,USER);
                    }else{
                        login = new UserController().login(usernameInput, passwordInput,MANAGER);
                    }
                    //根据返回结果进行判断
                    if ("用户名为空".equals(login.getResult())) {
                        JOptionPane.showMessageDialog(panel, "用户名不能为空!");
                    } else if ("密码为空".equals(login.getResult())) {
                        JOptionPane.showMessageDialog(panel, "密码不能为空!");
                    } else if("用户名错误,登录失败!".equals(login.getResult())){
                        JOptionPane.showMessageDialog(panel,"用户名错误!");
                    }else if ("密码错误,登录失败!".equals(login.getResult())) {
                        JOptionPane.showMessageDialog(panel, "密码错误!");
                    }else if("您已被管理员拉黑,无法登录".equals(login.getResult())){
                        JOptionPane.showMessageDialog(panel,"您已被管理员拉黑,无法登录");
                    } else {
                        if(loginModel==USER) {
                            //用户登录成功,关闭当前页面并跳转到用户主页面
                            this.dispose();
                            try {
                                new MainPageFrame();
                            } catch (Exception ex) {
                                ex.printStackTrace();
                            }
                        }else{
                            //管理员登录成功,关闭当前页面并跳转到管理员主页面
                            this.dispose();
                            try {
                                new MainFrame();
                            } catch (Exception ex) {
                                ex.printStackTrace();
                            }
                        }
                    }
                }
        );

        //注册->点击事件
        registerButton.addActionListener((e) -> {
                    //关闭当前页面
                    this.dispose();
                    //点击后跳转到注册页面
                    try {
                        new RegisterFrame();
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
        );

    }

    private void initFrame() throws IOException {
        //设置宽高
        this.setSize(400, 400);
        //设置居中
        this.setLocationRelativeTo(null);
        //设置标题
        this.setTitle("扇贝单词");
        //设置标题旁边的logo图标
        this.setIconImage(ImageIO.read(new File("src//image//logo.jpg")));
        //设置置顶
        this.setAlwaysOnTop(true);
        //设置关闭模式
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

}
